package org.example.ch09websocket.server;

import jakarta.servlet.http.HttpSession;
import jakarta.websocket.HandshakeResponse;
import jakarta.websocket.server.HandshakeRequest;
import jakarta.websocket.server.ServerEndpointConfig;

/**
 * @ClassName HandshakeHandler
 * @Description 握手处理器   在握手时获取 servlet 环境下的对象信息（如：HttpSession，HttpRequest等） 并将这些数据保存到 websocket 的 session 对象中
 * @Author Kx
 * @Date 2025/9/18 15:03
 * @Version 1.0
 */
public class HandshakeHandler extends ServerEndpointConfig.Configurator {
    /**
     * @author: kx
     * @date: 2025/9/18 15:05
     * @param request : servlet 的请求对象
     * @param response : servlet 的响应对象
     * @description: 重写握手方法
    */
    @Override
    public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
        // 获取 HttpSession 对象
        HttpSession httpSession = (HttpSession) request.getHttpSession();
        // 从 HttpSession 对象中获取登录的用户信息
        String user = (String) httpSession.getAttribute("user");
        // 将用户信息保存到 webSocket 的 session 对象中，每一个 websocket 的 session 都维护了一个 map 集合，个体UserProperties()方法就是得到 session 的 map
        sec.getUserProperties().put("user", user);
    }
}
